In recent years, solid-state drives (SSDs) have been developed as data storage apparatuses, each using NAND flash memories (hereinafter referred to as “flash memories” in certain cases) that are rewritable nonvolatile memories.
Most SSDs are of a multi-channel type, in which a plurality of flash memories are managed in units of channels and in which data is written to channels in parallel. In any SSD of the multi-channel type, the data (user data) that should be written in each channel is used, thereby generating inter-channel error (ICP) correction codes. If the errors cannot be corrected in units of sectors during the read process, the SSD will perform the inter-channel error correction by using the inter-channel error correction codes.
In the conventional SSD, inter-channel correction codes are generated and saved, whereby the inter-channel error correction can be performed. In the inter-channel error correction, those of the data items in any logical page which should be read are first designated and then decoded (thus achieving data recovery).
A corrective read process is performed in the inter-channel error correction, thereby to read, from each channel, all data that should be decoded. While the corrective read process is proceeding, errors may be detected in data items other than those designated and should be corrected. In this case, all data must be decoded again. This is because of the data items in which errors are detected and which should be corrected. Inevitably, the efficiency of reading data may decrease.